package com.bi.vo;

import lombok.Data;

import java.util.List;
import java.util.Map;

/**
 * 数据宽表数据视图对象
 * 
 * @author BI Platform Team
 * @since 1.0.0
 */
@Data
public class WideTableDataVO {

    /**
     * 数据列表
     */
    private List<Map<String, Object>> records;

    /**
     * 字段信息
     */
    private List<FieldInfo> fieldInfos;

    /**
     * 总记录数
     */
    private Long total;

    /**
     * 当前页
     */
    private Integer current;

    /**
     * 每页大小
     */
    private Integer size;

    /**
     * 查询耗时(毫秒)
     */
    private Long queryTime;

    /**
     * 聚合结果
     */
    private Map<String, Object> aggregations;

    /**
     * 字段信息
     */
    @Data
    public static class FieldInfo {

        /**
         * 字段名称
         */
        private String fieldName;

        /**
         * 显示名称
         */
        private String displayName;

        /**
         * 字段类型
         */
        private String fieldType;

        /**
         * 是否为显示字段
         */
        private Boolean isDisplayField;

        /**
         * 是否为查询字段
         */
        private Boolean isQueryField;

        /**
         * 排序序号
         */
        private Integer sortOrder;

        /**
         * 字段统计信息
         */
        private FieldStats stats;
    }

    /**
     * 字段统计信息
     */
    @Data
    public static class FieldStats {

        /**
         * 非空值数量
         */
        private Long count;

        /**
         * 唯一值数量
         */
        private Long distinctCount;

        /**
         * 最小值
         */
        private Object min;

        /**
         * 最大值
         */
        private Object max;

        /**
         * 平均值(数值类型)
         */
        private Double avg;

        /**
         * 总和(数值类型)
         */
        private Double sum;

        /**
         * 空值数量
         */
        private Long nullCount;

        /**
         * 空值比例
         */
        private Double nullRate;
    }
}